/*
 * @Author: 孙大大
 * @Date: 2022-03-22 09:40:02
 * @LastEditTime: 2022-03-25 15:45:09
 * @FilePath: \vue-admin-template-master\src\store\modules\user.js
 */
import { getToken, setToken, removeToken, setTimeStamp } from "@/utils/auth";
import { login, getUserInfo, getUserDetailById } from "@/api/user";
const state = {
  token: getToken(), // 设置token为共享状态
  userInfo: {},
};
const actions = {
  async login(context, data) {
    const result = await login(data);
    // if (result.data.success) {
    //   const token = result.data.data;
    //   context.commit("setToken", token);
    // }
    context.commit("setToken", result);
    setTimeStamp();
  },
  // 获取用户资料action
  async getUserInfo(context) {
    const result = await getUserInfo(); // 获取返回值
    const baseInfo = await getUserDetailById(result.userId); // 为了获取头像
    const baseResult = { ...result, ...baseInfo }; // 将两个接口结果合并
    // 此时已经获取到了用户的基本资料 迫不得已 为了头像再次调用一个接口
    context.commit("setUserInfo", baseResult); // 将整个的个人信息设置到用户的vuex数据中
    return result; // 这里为什么要返回 为后面埋下伏笔
  },
  logout(context) {
    // 删除token
    context.commit("removeToken"); // 不仅仅删除了vuex中的 还删除了缓存中的
    // 删除用户资料
    context.commit("reomveUserInfo"); // 删除用户信息
  },
};
const mutations = {
  setToken(state, token) {
    state.token = token;
    // 同步给缓存
    setToken(token);
  },
  removeToken(state) {
    state.token = null;
    removeToken(); // 清空缓存
  },
  // 设置用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = { ...userInfo }; // 用 浅拷贝的方式去赋值对象 因为这样数据更新之后，才会触发组件的更新
  },
  // 删除用户信息
  reomveUserInfo(state) {
    state.userInfo = {};
  },
};
const getters = {};

export default {
  namespaced: true,
  state,
  mutations,
  getters,
  actions,
};
